﻿#pragma once

#include <vector>
#include <string>
using namespace std;

#define 对应函数实现方法 3				// 每个函数推荐的有多种实现方法，选哪一种运行

class Solution
{
public:
	// 找出表中只出现一次的数字
	int singleNumber(vector<int>& nums);
	// 给定一个大小为 n 的数组，找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
	int majorityElement(vector<int>& nums);
	// 搜索二维矩阵 II。判断二维矩阵中值是否存在，从左小角左边更小，右边更大，可以知道方向
	bool searchMatrix(vector<vector<int>>& matrix, int target);
	// 个按 非递减顺序 排列的整数数组 nums1 和 nums2，另有两个整数 m 和 n ，分别表示 nums1 和 nums2 中的元素数目
	void merge(vector<int>& nums1, int m, vector<int>& nums2, int n);
	// n层楼，k个鸡蛋，计算最差情况，最少多少次可以知道鸡蛋最高能在哪层楼扔下不坏
	int superEggDrop(int k, int n);
	// 66. 加一
	vector<int> plusOne(vector<int>& digits);
	// 125. 验证回文串
	bool isPalindrome(string s);
	// 209. 长度最小的子数组
	int minSubArrayLen(int target, vector<int>& nums);
	// 30. 串联所有单词的子串。 我提交的超时了
	vector<int> findSubstring(string s, vector<string>& words);
	// 76. 最小覆盖子串
	string minWindow(string s, string t);
	// 228. 汇总区间
	vector<string> summaryRanges(vector<int>& nums);
	// 57. 插入区间
	vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval);
	// 2310. 个位数字为 K 的整数之和
	int minimumNumbers(int num, int k);
	// 452. 用最少数量的箭引爆气球
	int findMinArrowShots(vector<vector<int>>& points);
};

